import requests
from datetime import datetime

# 假设的 REST API 地址，你需要替换为实际的地址，用于发送故障信息
FAULT_API_URL = "http://222.134.245.144:17000/weizhang/VioModel/"

# 定义一个函数，用于将故障信息发送到 REST API
def send_fault_info(fault_info):
    """
    发送故障信息到 REST API
    :param fault_info: 包含故障详细信息的字典
    """
    try:
        # 发送 POST 请求，将故障信息以 JSON 格式发送到指定的 API 地址
        response = requests.post(FAULT_API_URL, json=fault_info)
        if response.status_code == 201:
            # 如果请求成功（状态码为 201），打印成功推送的信息，并显示故障 ID
            print(f"成功推送故障信息到 API，故障 ID: {response.json().get('id')}")
        else:
            # 如果请求失败，打印失败信息，包含状态码和响应内容
            print(f"推送故障信息失败，状态码: {response.status_code}，响应内容: {response.text}")
    except requests.RequestException as e:
        # 如果请求过程中出现异常，打印异常信息
        print(f"网络请求出错: {e}")

# 定义一个函数，用于检查管汇系统的调压稳定性
def guanhui():
    # 定义获取管汇系统数据的 API URL
    url = "http://222.134.245.144:17000//chuanganqi/BopPanelModel/"
    # 发送 GET 请求获取数据
    response = requests.get(url)
    if response.status_code == 200:
        # 如果请求成功，将响应内容转换为 JSON 格式
        data = response.json()
        # 获取结果列表
        results = data.get("results", [])
        if len(results) < 2:
            # 如果结果列表中的数据少于 2 条，打印数据不足的信息并返回
            print("数据不足，无法进行调压稳定性判断。")
            return

        # 从第一条结果中获取万能压力值
        wan_neng_ya_li = results[0].get("wan_neng_ya_li")
        # 从第一条结果中获取管汇压力值
        guan_hui_ya_li = results[0].get("guan_hui_ya_li")
        # 从第一条结果中获取主流量值
        zhu_liu_liang1 = results[0].get("liu_liang_ji")
        # 从第二条结果中获取主流量值
        zhu_liu_liang2 = results[1].get("liu_liang_ji")
        # 从第一条结果中获取旁路开关状态
        bypass1 = results[0].get("pang_tong", {}).get("kai_deng")
        # 从第二条结果中获取旁路开关状态
        bypass2 = results[1].get("pang_tong", {}).get("kai_deng")

        # 判断主流量相等且万能压力值不在 1200 - 1500 范围内的情况
        if zhu_liu_liang1 == zhu_liu_liang2 and (float(wan_neng_ya_li) > 1500 or float(wan_neng_ya_li) < 1200):
            # 打印万能压力调压不稳的信息
            print("万能压力调压不稳")
            # 构造故障信息
            fault_info = {
                "gu_zhang_ming_cheng": "万能压力调压不稳",
                "she_bei_ming_cheng": "管汇系统",
                "she_bei_qu_yu": "设备所在区域（需根据实际修改）",
                "gu_zhang_shi_jian": datetime.now().strftime("%Y-%m-%dT%H:%M:%S"),
                "gu_zhang_lei_xing": "压力异常",
                "shi_ji_zhi": float(wan_neng_ya_li),
                "gao_jing_zhi": 1500,
                "di_jing_zhi": 1200,
                "gu_zhang_miao_shu": f"主流量相等时，万能压力值为 {wan_neng_ya_li}，不在 1200 - 1500 范围内",
                "chu_li_zhuang_tai": "未处理"
            }
            # 调用 send_fault_info 函数推送故障信息
            send_fault_info(fault_info)

        # 判断主流量相等、管汇压力值不在 1200 - 1700 范围内且旁路开关状态相同的情况
        if zhu_liu_liang1 == zhu_liu_liang2 and (
                float(guan_hui_ya_li) > 1700 or float(guan_hui_ya_li) < 1200) and bypass1 == bypass2:
            # 打印管汇压力调压不稳的信息
            print("管汇压力调压不稳")
            # 构造故障信息
            fault_info = {
                "gu_zhang_ming_cheng": "管汇压力调压不稳",
                "she_bei_ming_cheng": "管汇系统",
                "she_bei_qu_yu": "设备所在区域（需根据实际修改）",
                "gu_zhang_shi_jian": datetime.now().strftime("%Y-%m-%dT%H:%M:%S"),
                "gu_zhang_lei_xing": "压力异常",
                "shi_ji_zhi": float(guan_hui_ya_li),
                "gao_jing_zhi": 1700,
                "di_jing_zhi": 1200,
                "gu_zhang_miao_shu": f"主流量相等且旁路开关状态相同时，管汇压力值为 {guan_hui_ya_li}，不在 1200 - 1700 范围内",
                "chu_li_zhuang_tai": "未处理"
            }
            # 调用 send_fault_info 函数推送故障信息
            send_fault_info(fault_info)
    else:
        # 如果请求失败，打印失败信息，包含状态码
        print(f"请求数据失败，状态码: {response.status_code}")

# 程序入口，调用 guanhui 函数进行管汇系统调压稳定性检查
if __name__ == "__main__":
    guanhui()